這是一個用於教學 OWASP Top 10 2025 RC1 網頁應用程式安全風險的示範專案。每個漏洞都有對應的程式碼、API 端點和攻擊腳本。
📋 版本說明: 本專案已從 OWASP Top 10 2021 升級至 2025 RC1 版本。詳見 版本對照表。
- Java 17
- Spring Boot 3.2.0
- Spring Security (刻意設定不安全)
- Spring Data JPA
- Thymeleaf + Bootstrap 5
- Log4j 2.14.1 (包含 CVE-2021-44228)
- MySQL 8.0 / H2 Database
- Docker & Docker Compose
| 編號 | 風險名稱 | 實作位置 | 2021 對照 |
|---|---|---|---|
| A01 | Broken Access Control | VulnerableAccessControlService, UserController, AdminController, VulnerableUrlFetcher (SSRF) |
A01 + A10:2021 合併 |
| A02 | Security Misconfiguration | VulnerableXmlParser, SecurityConfig, WebConfig |
A05:2021 ⬆️ |
| A03 | Software Supply Chain Failures | VulnerableDependencyLoader, VulnerablePackageVerifier |
A06:2021 擴展 🆕 |
| A04 | Cryptographic Failures | VulnerableCryptoService |
A02:2021 ⬇️ |
| A05 | Injection | VulnerableUserRepository, VulnerableCommandExecutor |
A03:2021 ⬇️ |
| A06 | Insecure Design | FileController |
A04:2021 ⬇️ |
| A07 | Authentication Failures | VulnerableSessionManager |
A07:2021 |
| A08 | Software/Data Integrity | VulnerableDeserializer |
A08:2021 |
| A09 | Logging & Alerting Failures | VulnerableAuditLogger |
A09:2021(強調 Alerting) |
| A10 | Mishandling Exceptional Conditions | VulnerableExceptionHandler, VulnerableFailOpenAuth |
全新類別 🆕 |
# 建置並啟動
docker-compose up --build
# 開啟瀏覽器
open http://localhost:8080# 建置專案
./mvnw clean package -DskipTests
# 執行 (使用 H2 資料庫)
./mvnw spring-boot:run -pl owasp-demo-web| 端點 | 說明 |
|---|---|
| http://localhost:8080 | 主應用程式 |
| http://localhost:8080/swagger-ui.html | API 文件 |
| http://localhost:8080/h2-console | H2 資料庫控制台 |
| http://localhost:8080/actuator | Spring Actuator |
攻擊腳本位於 scripts/exploits/ 目錄:
# 安裝相依套件
pip install requests
# A01 - IDOR 攻擊
python scripts/exploits/a01_idor.py --target http://localhost:8080 --start 1 --end 10
# A03 - SQL Injection
python scripts/exploits/a03_sqli.py --target http://localhost:8080
# A03 - Command Injection
python scripts/exploits/a03_command_injection.py --target http://localhost:8080
# A05 - XXE
python scripts/exploits/a05_xxe.py --target http://localhost:8080
# A06 - Log4Shell
python scripts/exploits/a06_log4shell.py --target http://localhost:8080 --attacker YOUR_IP
# A10 - SSRF
python scripts/exploits/a10_ssrf.py --target http://localhost:8080 --category aws_metadata本項目包含完整的截圖自動化工具,可自動捕獲所有 OWASP 演示的截圖。
# 一鍵運行(推薦)
./scripts/run_all_screenshots.sh
# 或分步運行
python3 scripts/capture_all_screenshots.py # Web 界面截圖(32 張)
python3 scripts/capture_terminal_outputs.py # 終端輸出截圖(9 張)
python3 scripts/update_screenshot_references.py # 更新文檔引用- 總計: 41 張高質量 PNG 截圖(3.8 MB)
- Web 界面: 32 張 (1920x1200 分辨率)
- 終端輸出: 9 張 (帶語法高亮)
截圖保存在:
docs/attacks/screenshots/- Web 界面截圖docs/attacks/screenshots/terminal/- 終端輸出截圖
# 掃描相依套件漏洞
./scripts/dependency-check.sh
# 或使用 Maven
./mvnw org.owasp:dependency-check-maven:check# 使用 Docker 執行 ZAP 掃描
./scripts/zap-scan.sh http://localhost:8080demo_java_va/
├── owasp-demo-api/ # Domain + Application 層 (介面定義)
│ └── src/main/java/com/demo/
│ ├── domain/ # DDD Domain 層
│ │ ├── user/ # User Bounded Context
│ │ ├── product/ # Product Bounded Context
│ │ └── file/ # File Bounded Context
│ └── application/ # Application 層 (Use Cases)
│
├── owasp-demo-vulnerable/ # Infrastructure 層 (漏洞實作)
│ └── src/main/java/com/demo/infrastructure/
│ ├── persistence/ # 資料存取(SQL Injection)
│ ├── security/ # 安全相關(弱加密、權限)
│ ├── external/ # 外部服務(SSRF、命令注入)
│ ├── xml/ # XML 解析(XXE)
│ ├── serialization/ # 序列化(反序列化漏洞)
│ └── logging/ # 日誌(Log Injection)
│
├── owasp-demo-web/ # Interfaces 層 (Controllers + UI)
│ └── src/main/java/com/demo/
│ ├── interfaces/rest/ # REST API
│ └── interfaces/web/ # Web 頁面(Thymeleaf + Bootstrap)
│
├── scripts/ # 工具腳本
│ ├── exploits/ # Python 攻擊腳本
│ ├── attacks/iot/ # IoT 攻擊腳本
│ ├── dependency-check.sh # 相依套件掃描
│ └── zap-scan.sh # ZAP 安全掃描
│
├── docs/ # 文件
│ ├── HANDOVER.md # 開發交接文件
│ └── IoT_OWASP_Attack_Tutorial.md
│
├── Dockerfile
├── docker-compose.yml
└── README.md
額外包含:
├── owasp-demo-secure/ # Infrastructure 層 (安全實作) ⭐ NEW
│ └── src/main/java/com/demo/infrastructure/
│ ├── security/secure/ # 安全版本的加密、權限控制
│ ├── persistence/secure/ # PreparedStatement 防 SQL Injection
│ └── ... # 其他安全實作
差異說明:
main分支:僅包含 3 個模組(學生無法看到安全實作)secure分支:包含 4 個模組(多了owasp-demo-secure)- 使用 Spring
@Profile("vulnerable")和@Profile("secure")切換實作
- 目的:供學生學習和實驗的漏洞展示版本
- 包含模組:
owasp-demo-api(介面定義)owasp-demo-vulnerable(漏洞實作)owasp-demo-web(Web 介面)
- 特點:學生無法看到安全修復的程式碼
- 目的:供教師展示如何修復漏洞
- 包含模組:main 分支的所有模組 +
owasp-demo-secure(安全實作) - 特點:可以透過 Spring Profile 切換漏洞版/安全版
# 查看當前分支
git branch
# 切換到安全版本(教師專用)
git checkout secure
# 切換回學生版本
git checkout main# 學生模式(使用漏洞實作)
docker-compose up
# 或
SECURITY_MODE=vulnerable docker-compose up
# 教師模式(需先切換到 secure 分支)
git checkout secure
SECURITY_MODE=secure docker-compose up
# 或使用 Maven Profile
mvn clean package -Psecure
java -jar -Dspring.profiles.active=secure owasp-demo-web/target/*.jar- 啟動應用:使用
docker-compose up啟動漏洞版本 - 實際攻擊:使用
scripts/exploits/中的攻擊腳本 - 理解危害:展示攻擊成功後的影響(資料外洩、權限提升等)
- 閱讀漏洞程式碼:引導學生找出
owasp-demo-vulnerable/中的問題 - 討論根本原因:為什麼會產生這個漏洞?
- 腦力激盪:如果你是開發者,會如何修復?
- 切換分支:
git checkout secure - 對比程式碼:使用 diff 工具比較漏洞版與安全版
# 比較特定檔案 git diff main secure -- owasp-demo-vulnerable/src/main/java/com/demo/infrastructure/security/vulnerable/VulnerableCryptoService.java - 學習修復技巧:理解使用了哪些安全機制
- 啟動安全版:
SECURITY_MODE=secure docker-compose up
- 重新攻擊:使用相同的攻擊腳本
- 觀察差異:攻擊失敗,應用記錄了攻擊行為
- 分析日誌:查看安全日誌如何記錄攻擊嘗試
- CTF 挑戰:讓學生在限時內找出並利用漏洞
- 程式碼審查競賽:找出最多漏洞的小組獲勝
- 修復練習:給學生漏洞程式碼,要求自己修復
- 安全掃描實作:使用 OWASP Dependency Check 和 ZAP
./scripts_demo/quick_start.sh vulnerable
./scripts_demo/quick_start.sh secure
./scripts_demo/run_comparison_demo.sh
./scripts_demo/stop_all.sh
MIT License - 僅供教學用途